/**
 **Object.values()**方法返回一个给定对象自身的所有可枚举属性值的数组，值的顺序与使用for...in循环的顺序相同 ( 区别在于 for-in 循环枚举原型链中的属性 )。

 例如我们可以使用Object.keys()收集keys，然后通过 key 去对象取对应的值：

 */

//测试
var obj = { foo: 'bar', baz: 42 };
console.log(Object.values(obj)); // ['bar', 42]

//测试
var obj = { 0: 'a', 1: 'b', 2: 'c' };
console.log(Object.values(obj)); // ['a', 'b', 'c']

//测试
var an_obj = { 100: 'a', 2: 'b', 7: 'c' };
console.log(Object.values(an_obj)); // ['b', 'c', 'a']



//测试
Object.prototype.nameE='blue'
let simpleColors = {
    nameA: 'a',
    nameB: 'b'
};
let natureColors = {
    colorC: 'green',
    colorD: 'yellow'
};
//指定natureColors的原型到simpleColors
Object.setPrototypeOf(natureColors, simpleColors);
//Object.keys自身可枚举属性键,没有枚举到指定到simpleColors的,也没有枚举原型链上的
console.log(Object.values(natureColors)) //[ 'green', 'yellow' ]
console.log(natureColors['nameA']) // a
console.log(natureColors['nameB']) // b



//测试
var my_obj = Object.create({}, { getFoo: { value: function() { return this.foo; } } });
my_obj.foo = 'bar';
console.log(Object.values(my_obj)); // ['bar']

//测试 非对象参数将强制为对象
console.log(Object.values('foo')); // ['f', 'o', 'o']

//测试
var obj = [1,2,3,'a'];
console.log(Object.values(obj)); // [ 1, 2, 3, 'a' ]


